/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package canteen.sys.model.generic;

import canteen.sys.model.entity.repository.BillDetailDAO;
import canteen.sys.model.entity.repository.BillMasterDAO;
import canteen.sys.model.entity.repository.DepartmentMasterDAO;
import canteen.sys.model.entity.repository.DesignationMasterDAO;
import canteen.sys.model.entity.repository.EmployeeMasterDAO;
import canteen.sys.model.entity.repository.FeedbackDAO;
import canteen.sys.model.entity.repository.ItemMasterDAO;
import canteen.sys.model.entity.repository.ItemTypeMasterDAO;
import canteen.sys.model.entity.repository.LoginDAO;
import canteen.sys.model.entity.repository.SubDepartmentMasterDAO;

/**
 *
 * @author TNT
 */
public abstract class DAOFactory {

    /**
     * Creates a standalone DAOFactory that returns unmanaged DAO beans for use
     * in any environment Hibernate has been configured for. Uses
     * HibernateUtil/SessionFactory and Hibernate context propagation
     * (CurrentSessionContext), thread-bound or transaction-bound, and
     * transaction scoped.
     */
    public static final Class HIBERNATE = canteen.sys.model.generic.HibernateDAOFactory.class;

    /**
     * Factory method for instantiation of concrete factories.
     */
    public static DAOFactory instance(Class factory) {
        try {
            return (DAOFactory) factory.newInstance();
        } catch (InstantiationException | IllegalAccessException ex) {
            throw new RuntimeException("Couldn't create DAOFactory: " + factory);
        }
    }
    // Add your DAO interfaces here

    public abstract BillDetailDAO getBillDetailDAO();

    public abstract BillMasterDAO getBillMasterDAO();

    public abstract DepartmentMasterDAO getDepartmentMasterDAO();

    public abstract DesignationMasterDAO getDesignationMasterDAO();

    public abstract EmployeeMasterDAO getEmployeeMasterDAO();

    public abstract ItemMasterDAO getItemMasterDAO();

    public abstract ItemTypeMasterDAO getItemTypeMasterDAO();

    public abstract LoginDAO getLoginDAO();

    public abstract SubDepartmentMasterDAO getSubDepartmentMasterDAO();

    public abstract FeedbackDAO getFeedbackDAO();
}
